;Robertas Nevecka
;Isversti eilute cezario kodu

sseg    segment	stack
        db	256 dup(?)
sseg    ends

dseg    segment
msg1    db	'iveskite eilute: ','$'
msg2    db	'cezario kodu:    ','$'
ived    db	255 dup('$')
ilgis   db 	?	
br      db	13,10,'$'
tusc	db	13,10,'KLAIDA: BUVO IVESTA TUSCIA EILUTE!!!',13,10,'$'
dseg    ends

cseg    segment
        assume cs:cseg,ds:dseg,ss:sseg
main    proc   far
        push   ds			;
        sub    ax,ax			; sitos eilutes yra standartas 
        push   ax			; praktiskai kiekvienai programai
        mov    ax,dseg			; jomis uzsikraunami visi duomenys
        mov    ds,ax			; is dseg (duomenu segmento)
        
        lea    dx,msg1                	; i dx siunciamas 'iveskite 
eilute' adresas
        mov    ah,9			; DOS'o 9 funkcija isspausdins dx'e esancia 
reiksme
        int    21h			; int (pertraukimas) isves i ekrana zodzius
        
        lea    dx,ived                	; i dx siunciamas tuscios 
eilutes ived adresas
        mov    ah,0Ah			; DOS'o 0Ah funkcija - ivedimas klaviatura
        int    21h			; int iskvies ivedima
        				; tad dabar i ived irasoma ivesta eilute
        				; o i ilgis irasomas tos eilutes ilgis

	cmp    ilgis,0			; jeigu ilgis = 0 tai...
	je     gal			; je (Jump if Equal) ... sokame link zymes gal - apacioje
        
        mov    ah,9                   	; cia ispausdinamas suolis
        lea    dx,br			; kiton eiluten
        int    21h			; br = 13,10
        
        lea    dx,msg2                	; isspausdinama
        mov    ah,9			; 'eilute cezario kodu: '
        int    21h			;
        
        				; stai cia prasides sudetingesni dalykai
        				; eilute i kuria irasome duomenis 'ived'
        				; apibrezta taip: ived db 256 dup('$')
        				; tad ji atrodo taip: $$$$$$$$$$$...$
        				; ivede 'labas' atrodo turetume gauti:
        				; labas$$$$$$$$...$, taciau gauname:
        				; $$labas*$$$$...$
        				; kur simbolis '*' ASCII kodu yra 0Dh
        				
        				; kadangi turime atskirai nagrineti kiekviena
        				; simboli, tad nurodome kad i pirmuosius du
        				; simbolius demesio kreipiama nebutu,
        				; o radus 0Dh arba '$' simboliu spausdinimas
        				; nutraukiamas
        
        lea    si,ived			; si visada veikia kaip skaitliukas
        				; ikeliame i si ived adresa
        				; si dabar rodys i pirmaji ived simboli
        				; siuo atveju i '$'
        add    si,2			; si = si + 2, nes turime nekreipti demesio
       					; i pirmuosius du simbolius
       					; $$labas*$$$$$$...$;
       					;   ^(cia rodo si);
        
isved:  mov    al,ds:si			; zyme isved prasideda ciklas
					; ir i al perkeliamas ived simbolis i
					; kuri rodo si
        inc    si			; si = si + 1. dabar si rodys i sekanti simbloli 
ived
        
        cmp   al,'$'			; jei simbolis '$' uzdarome programa
        je    galas			; 
        cmp   al,0Dh			; jei simbolis 0Dh uzdarome programa
        je    galas			;
        cmp   al,'y'			; jei simbolis 'y' sokame prie zymes yy 
        je    yy			; ir tt.
        cmp   al,'z'
        je    zz
        cmp   al,'Y'
        je    yyyy
        cmp   al,'Z'
        je    zzzz
        cmp   al,' '
        je    tarps
        
        add   al,2			; jei visi palyginimai praeinami
        				; simbolis saugomas al padidinamas 2
        				; tai sifravimas cezario kodu
        				; a -> c, B -> D ir pan.
        
isveds: mov   dl,al			; 2 DOS'o funkcija vienas simbolis saugomas
        mov   ah,02h			; saugomas al isvedamas i ekrana
        int   21h
        jmp   isved

        
yy:     mov   al,'a'			; jei al buvo 'y' tai jis pakeiciamas i 'a'
        jmp   isveds			; ir sokama tiesiai prie simbolio isvedimo
zz:     mov   al,'b'			; t.y simbolis saugomas al nedidinamas 2
        jmp   isveds			; ir tt.
yyyy:   mov   al,'A'
        jmp   isveds
zzzz:   mov   al,'B'
        jmp   isveds
tarps:  jmp   isveds

	
gal:	mov   ah,9          		; jei nieko ivesta nebuvo
        lea   dx,tusc			; t.y ilgis = 0
        int   21h			; tai i ekrana spausdinama 
					; 'KLAIDA: BUVO IVESTA TUSCIA EILUTE!!!'
					
galas:  mov   ah,4Ch			; standartine kiekvienos programos dalis 
        int   21h			; programa uzdaroma

        
main    endp
cseg    ends
end     main
        